package com.ruoyi.web.controller.tool.designpattern.behavioralPatterns.state;

// Context类
 class Context {
    private State state;

    public Context() {
        state = new StateA(); // 初始状态为StateA
    }

    public void setState(State state) {
        this.state = state;
    }

    public void request() {
        state.handle(this);
    }
}

// State接口
 interface State {
    void handle(Context context);
}

// StateA类
 class StateA implements State {
    @Override
    public void handle(Context context) {
        System.out.println("当前状态是A，执行A相关操作");
        context.setState(new StateB()); // 切换到StateB状态
    }
}

// StateB类
 class StateB implements State {
    @Override
    public void handle(Context context) {
        System.out.println("当前状态是B，执行B相关操作");
        context.setState(new StateA()); // 切换回StateA状态
    }
}

/**
 * 状态模式适用于需要管理对象状态、状态之间有明确转换关系、状态会影响对象行为的情况下。
 */
public class Test {
    public static void main(String[] args) {
        Context context = new Context();
        //初始化的时候，设置了A，所以第一个输出的是A // 输出：当前状态是A，执行A相关操作
        context.request();
        //A执行的过程中，又设置成了B。即改了状态，所以下面调用是输出B // 输出：当前状态是B，执行B相关操作
        context.request();
    }
}
